/**
 * javaHispano 2008
 */
package org.javahispano.jwitter.view.controller;



import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.javahispano.jwitter.data.dao.UsuarioDao;
import org.javahispano.jwitter.domain.Authority;
import org.javahispano.jwitter.domain.Usuario;
import org.javahispano.jwitter.view.command.UsuarioCommand;
import org.javahispano.jwitter.view.validator.UsuarioValidator;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author javaHispano
 * Controlador de las pantallas del Usuario
 */
@Controller
public class UsuarioController {
	
	private static Logger log = Logger.getLogger(UsuarioController.class.getName());
	
	@Autowired
	private UsuarioDao usuarioDao;		
	
	public void setUsuarioDao(UsuarioDao usuarioDao) {
		this.usuarioDao = usuarioDao;
	}


	@RequestMapping(value="/registro.html", method=RequestMethod.GET)
	public void registrarForm(ModelMap model){
		model.addAttribute("usuario", new UsuarioCommand());
	}
	
	
	@Transactional
	@RequestMapping(value="/registro.html", method=RequestMethod.POST)	
	public String registrar(@ModelAttribute("usuario") UsuarioCommand command,  BindingResult result){
		new UsuarioValidator().validate(command, result);
		if(result.hasErrors()){
			log.info("Errores en el registro");
			return "registro";
		}
		log.info("Sin errores");
		Usuario usuario = new Usuario();
		BeanUtils.copyProperties(command, usuario);
		usuario.setEnabled(true);
		usuario.setFechaRegistro(new Date());
		List<Authority> authorities = new ArrayList<Authority>();
		Authority auth = new Authority();
		auth.setAuthority(Authority.ROLE_USER);
		auth.setUsuario(usuario);
		authorities.add(auth);
		usuario.setAuthorities(authorities);
		usuarioDao.persist(usuario);
		return "redirect:login.html?alta=true";
	}
	
	@RequestMapping(value="/login.html", method=RequestMethod.GET)
	public void loginForm(@RequestParam(value="alta",required=false) Boolean alta, ModelMap model){
		if(alta != null){
			model.addAttribute("mensaje", "Tu registro fue exitoso. Ya puedes entrar a jwitter");
		}else{
			//Para evitar nullpointers en Freemarker
			model.addAttribute("mensaje", "");
		}	
	}
	
	@RequestMapping("/usuario.html")
	public void usuario(){
		
	}
}
